/*
 * Client.h
 * SimpleqqClent客户端
 * Created by wzy on 2017/9/21.
 * Copyright @ 2017 wzy. All rights reserverd.
 */
#ifndef CLIENT_H
#define CLIENT_H

#define PORT 8003 //默认端口
#define MAXSIZE 4096 //TCP包的最大字节数

//通信错误代码
#define CS_LINKERROR -1
#define CS_SENDERROR -2
#define CS_REJECTED_LOGIN -3
#define CS_LOGIN_SERVERERROR -4
#define CS_LOGIN_USERERROR -5

#include <string>

#ifdef _WIN32
#include <winsock.h>
#endif

class clientThread;
class loginWindow;

/*
 * 客户端为程序的主控制端，控制qt窗口的显示与切换，同时控制网络多线程的通信，在客户端类中实现qt多线程与主界面的交互绑定。
 */
class SimpleqqClient{
    friend class clientThread;//thread可任意调用内部方法
public:
    static int _sid;//socket文件描述符，客户端通过socket()创建_sid，用于与服务器通信
    static int _id;//客户端与服务器的内置id，客户端login成功之后由服务器分配

    loginWindow *window_login;//登录窗口

#ifdef _WIN32
    WSADATA wsaData;
#endif

    bool sendStream (const char* data, long size_of_data);//发送数据流

    int client_exit(void *);
    int client_login(void *);

public:
    SimpleqqClient();
    ~SimpleqqClient();
    int init();
    int thread_login(std::string &username,std::string &password);
};

#endif // CLIENT_H
